/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package CommandGeraGrafico;

import Cliente.Controller.GraficoPresenter;
import Cliente.Entidade.Cliente;
import Cliente.Model.PesquisarPaciente;
import Cliente.util.ContaIAC;
import Cliente.util.ContaIMC;
import Cliente.util.ContaRCQ;
import Cliente.util.GeradorDeGrafico;
import Cliente.util.SelecionarSexo;
 
import java.util.ArrayList;
import java.util.List;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
/**
 *
 * @author Caio
 */
public class GerarGraficoCommand extends AbstractGerarGraficoCommand {

    GraficoPresenter gerargrafico;
    private SelecionarSexo ss = new SelecionarSexo();
    private GeradorDeGrafico gerador = new GeradorDeGrafico();

    public GerarGraficoCommand(GraficoPresenter receptor) {
        super(receptor);
        gerargrafico = receptor;
    }

    @Override
    public void execute() {
    }

    public CategoryDataset ajustaValoresGraficoIMC() {

        List<Cliente> clintesMasculino = new ArrayList<>();
        List<Cliente> clintesFeminino = new ArrayList<>();

        Integer contABMA = 0;
        Integer contNOMA = 0;
        Integer contMAMA = 0;
        Integer contACMA = 0;
        Integer contOBMA = 0;


        Integer contABFE = 0;
        Integer contNOFE = 0;
        Integer contMAFE = 0;
        Integer contACFE = 0;
        Integer contOBFE = 0;

        PesquisarPaciente consultarpaciente = new PesquisarPaciente();
        gerargrafico.setClientes(consultarpaciente.listarClientes());

        ContaIMC contaimc = new ContaIMC();


        for (int i = 0; i < gerargrafico.getClientes().size(); i++) {
            clintesMasculino.add(ss.SelecionaListaMasculino(gerargrafico.getClientes().get(i)));
        }

        for (int i = 0; i < gerargrafico.getClientes().size(); i++) {
            clintesFeminino.add(ss.SelecionaListaFeminino(gerargrafico.getClientes().get(i)));
        }

        contABMA = contaimc.contaIMCAB(clintesMasculino);
        contNOMA = contaimc.contaIMCNO(clintesMasculino);
        contMAMA = contaimc.contaIMCMA(clintesMasculino);
        contACMA = contaimc.contaIMCAC(clintesMasculino);
        contOBMA = contaimc.contaIMCOB(clintesMasculino);

        contABFE = contaimc.contaIMCAB(clintesFeminino);
        contNOFE = contaimc.contaIMCNO(clintesFeminino);
        contMAFE = contaimc.contaIMCMA(clintesFeminino);
        contACFE = contaimc.contaIMCAC(clintesFeminino);
        contOBFE = contaimc.contaIMCOB(clintesFeminino);


        DefaultCategoryDataset dataset = new DefaultCategoryDataset();
        dataset.addValue(contABMA, "Abaixo do peso", "Masculino");
        dataset.addValue(contABFE, "Abaixo do peso", "Feminino");
        dataset.addValue(contNOMA, "No peso normal", "Masculino");
        dataset.addValue(contNOFE, "No peso normal", "Feminino");
        dataset.addValue(contMAMA, "Marginalmente acima do peso", "Masculino");
        dataset.addValue(contMAFE, "Marginalmente acima do peso", "Feminino");
        dataset.addValue(contACMA, "Acima do peso ideal", "Masculino");
        dataset.addValue(contACFE, "Acima do peso ideal", "Feminino");
        dataset.addValue(contOBMA, "Obeso", "Masculino");
        dataset.addValue(contOBFE, "Obeso", "Feminino");

        return dataset;
    }

    public CategoryDataset ajustaValoresGraficoIAC() {
        List<Cliente> clintesMasculino = new ArrayList<>();
        List<Cliente> clintesFeminino = new ArrayList<>();

        Integer contABMA = 0;
        Integer contPEMA = 0;
        Integer contSOMA = 0;
        Integer contOBMA = 0;


        Integer contABFE = 0;
        Integer contPEFE = 0;
        Integer contSOFE = 0;
        Integer contOBFE = 0;

        PesquisarPaciente consultarpaciente = new PesquisarPaciente();
        gerargrafico.setClientes(consultarpaciente.listarClientes());

        ContaIAC contaiac = new ContaIAC();


        for (int i = 0; i < gerargrafico.getClientes().size(); i++) {
            clintesMasculino.add(ss.SelecionaListaMasculino(gerargrafico.getClientes().get(i)));
        }

        for (int i = 0; i < gerargrafico.getClientes().size(); i++) {
            clintesFeminino.add(ss.SelecionaListaFeminino(gerargrafico.getClientes().get(i)));
        }

        contABMA = contaiac.contaIACab(clintesMasculino);
        contPEMA = contaiac.contaIACpe(clintesMasculino);
        contSOMA = contaiac.contaIACso(clintesMasculino);
        contOBMA = contaiac.contaIACob(clintesMasculino);

        contABFE = contaiac.contaIACab(clintesFeminino);
        contPEFE = contaiac.contaIACpe(clintesFeminino);
        contSOFE = contaiac.contaIACso(clintesFeminino);
        contOBFE = contaiac.contaIACob(clintesFeminino);



        DefaultCategoryDataset dataset = new DefaultCategoryDataset();
        dataset.addValue(contABMA, "Abaixo do peso", "Masculino");
        dataset.addValue(contABFE, "Abaixo do peso", "Feminino");
        dataset.addValue(contPEMA, "Peso normal", "Masculino");
        dataset.addValue(contPEFE, "Peso normal", "Feminino");
        dataset.addValue(contSOMA, "Sobrepeso", "Masculino");
        dataset.addValue(contSOFE, "Sobrepeso", "Feminino");
        dataset.addValue(contOBMA, "Obesidade", "Masculino");
        dataset.addValue(contOBFE, "Obesidade", "Feminino");

        return dataset;
    }

    public CategoryDataset ajustaValoresGraficoRCQ() {
        List<Cliente> clintesMasculino = new ArrayList<>();
        List<Cliente> clintesFeminino = new ArrayList<>();


        Integer contBAMA = 0;
        Integer contMOMA = 0;
        Integer contALMA = 0;
        Integer contMUMA = 0;


        Integer contBAFE = 0;
        Integer contMOFE = 0;
        Integer contALFE = 0;
        Integer contMUFE = 0;

        PesquisarPaciente consultarpaciente = new PesquisarPaciente();
        gerargrafico.setClientes(consultarpaciente.listarClientes());

        ContaRCQ contarcq = new ContaRCQ();


        for (int i = 0; i < gerargrafico.getClientes().size(); i++) {
            clintesMasculino.add(ss.SelecionaListaMasculino(gerargrafico.getClientes().get(i)));
        }

        for (int i = 0; i < gerargrafico.getClientes().size(); i++) {
            clintesFeminino.add(ss.SelecionaListaFeminino(gerargrafico.getClientes().get(i)));
        }

        contBAMA = contarcq.contaRCQba(clintesMasculino);
        contMOMA = contarcq.contaRCQmo(clintesMasculino);
        contALMA = contarcq.contaRCQal(clintesMasculino);
        contMUMA = contarcq.contaRCQmu(clintesMasculino);

        contBAFE = contarcq.contaRCQba(clintesFeminino);
        contMOFE = contarcq.contaRCQmo(clintesFeminino);
        contALFE = contarcq.contaRCQal(clintesFeminino);
        contMUFE = contarcq.contaRCQmu(clintesFeminino);



        DefaultCategoryDataset dataset = new DefaultCategoryDataset();
        dataset.addValue(contBAMA, "RCQ Baixo", "Masculino");
        dataset.addValue(contBAFE, "RCQ Baixo", "Feminino");
        dataset.addValue(contMOMA, "RCQ Moderado", "Masculino");
        dataset.addValue(contMOFE, "RCQ Moderado", "Feminino");
        dataset.addValue(contALMA, "RCQ Alto", "Masculino");
        dataset.addValue(contALFE, "RCQ Alto", "Feminino");
        dataset.addValue(contMUMA, "RCQ Muito Alto", "Masculino");
        dataset.addValue(contMUFE, "RCQ Muito Alto", "Feminino");

        return dataset;
    }

    public void gerarGraficoIMC() {
        gerador.criaGrafico(ajustaValoresGraficoIMC(), gerargrafico.view.getjPanel1());
    }

    public void gerarGraficoIAC() {
        gerador.criaGrafico(ajustaValoresGraficoIAC(), gerargrafico.view.getjPanel1());
    }

    public void gerarGraficoRCQ() {
        gerador.criaGrafico(ajustaValoresGraficoRCQ(), gerargrafico.view.getjPanel1());
    }

   
    
}
